
String comdata = "";
int cpos;
int n;
int skip;
int gain;
String tem;
float time;
long data[1000];
int repeat;
int inter;
boolean flag = false;
int zero;
int now;
int t1;
int t2;
//-------------------------------------------
#include <Wire.h>
#include <Adafruit_MCP4725.h>
#include <Adafruit_ADS1015.h>
//--------------------------------------------------



//--------------------------------------------
Adafruit_MCP4725 dac;
Adafruit_ADS1115 ads(0x48);
//--------------------------------------------------

void setup() {
  Serial.begin(9600);
  pinMode(A0, OUTPUT);
  ads.setGain(GAIN_ONE);
  dac.begin(0x62);
  pinMode(A1,OUTPUT);

  //  Serial.println("INPUT:n(<1000,9ms),skip(ms),gain(0,1,2,4,8 or 16),repaet,interval(s)");
}

void loop()
{
  while (Serial.available() > 0)
  {
    comdata += char(Serial.read());
    delay(2);

    /*  if (comdata.length() > 0 && comdata == "zero") {
       zero = 0;
       now = 10000;
       ads.setGain(GAIN_SIXTEEN);
       while(now > 100){
       zero++;
       dac.setVoltage(zero,false);
       now =  ads.readADC_SingleEnded(2);
        }
    */
    //comdata = "";
    //  Serial.print("DONE(");
    //  Serial.println(zero);
  }

  if (comdata.length() > 0)
  {
    cpos = comdata.indexOf(',');
    if (cpos != -1) {
      tem = comdata.substring(0, cpos);
      n = tem.toInt();
      comdata = comdata.substring(cpos + 1, comdata.length());
    }
    cpos = comdata.indexOf(',');
    if (cpos != -1) {
      tem = comdata.substring(0, cpos);
      skip = tem.toInt();
      comdata = comdata.substring(cpos + 1, comdata.length());
    }
    cpos = comdata.indexOf(',');
    if (cpos != -1) {
      tem = comdata.substring(0, cpos);
      gain = tem.toInt();
      comdata = comdata.substring(cpos + 1, comdata.length());
    }
    cpos = comdata.indexOf(',');
    if (cpos != -1) {
      tem = comdata.substring(0, cpos);
      repeat = tem.toInt();
      comdata = comdata.substring(cpos + 1, comdata.length());
    }
    cpos = comdata.indexOf(',');
/*    if (cpos != -1) {
      tem = comdata.substring(0, cpos);
      inter = tem.toInt();
      comdata = comdata.substring(cpos + 1, comdata.length());
    }*/
    inter = comdata.toInt();
    comdata = "";
    /*    Serial.println("n:");
        Serial.println(n);
        Serial.println("skip:");
        Serial.println(skip);
        Serial.println("gain:");
        Serial.println(gain);
        Serial.println("repeat:");
        Serial.println(repeat);
        Serial.println("interval:");
        Serial.println(inter);
    */
    switch (gain) {
      case 0:
        ads.setGain(GAIN_TWOTHIRDS);
        break;
      case 1:
        ads.setGain(GAIN_ONE);
        break;
      case 2:
        ads.setGain(GAIN_TWO);
        break;
      case 4:
        ads.setGain(GAIN_FOUR);
        break;
      case 8:
        ads.setGain(GAIN_EIGHT);
        break;
      case 16:
        ads.setGain(GAIN_SIXTEEN);
        break;
    }
    for (int j = 0; j < repeat; j++) {
      digitalWrite(A0, HIGH);
      delay(skip);
      //     time = millis();
      //dac.setVoltage(zero, false);

      for (int i = 0; i < n; i++) {
        digitalWrite(A0, HIGH);
        t1 = ads.readADC_SingleEnded(2);
        digitalWrite(A0, LOW);
        t2 = ads.readADC_SingleEnded(2);
        data[i] = t1-t2;
      }
      digitalWrite(A0, LOW);
      //Serial.print("time for measuring(ms):");
      //Serial.println(millis() - time);
      for (int i = 0; i < n; i++) {
        Serial.print(data[i]);
        Serial.print(",");
      }
      Serial.println("");
 //   Serial.println(zero);
 //     Serial.println(ads.readADC_SingleEnded(3));
      delay(50);
      digitalWrite(A1,HIGH);
      for (int k = 0; k < 1000; k++) {
        delay(inter);
      }
      digitalWrite(A1,LOW);
      delay(50);
    }

    //    Serial.println("INPUT:n(<1000,9ms),skip(ms),gain(0,1,2,4,8 or 16),repaet,interval(s)");
  }
}
